package gameengine;

import java.awt.*;
import java.util.Hashtable;

/**
 * Classe que representa uma sprite animada por um spritesheet
 * @author Victor
 */
public class SpriteAnimada extends Sprite implements IUpdateable
{
	private Hashtable<String, Animacao> animacoes = new Hashtable<String, Animacao>();
	private String _nomeAnimacaoAtual;

	public SpriteAnimada(Point posicao, Animacao... animacoes)
	{
		super(posicao);

		for(Animacao animacao:animacoes)
		{
			this.animacoes.put(animacao.GetApelido(), animacao);
		}
	}

	@Override
	/**
	 * Sobreescreve o método, para retorna somente o retângulo da animação
	 * @owner Victor
	 */
	public Rectangle GetRetanguloDesenho()
	{
		return this.animacoes.get(GetNomeAnimacaoAtual()).GetRetangulo();
	}

	@Override
	/**
	 * Retorna a textura da animação atual
	 * @author Victor
	 */
	public Textura GetTextura()
	{
		return animacoes.get(_nomeAnimacaoAtual).GetTextura();
	}

	/**
	 * Retorna o apelido da animação atual
	 * @owner Victor
	 */
	public String GetNomeAnimacaoAtual()
	{
		return _nomeAnimacaoAtual;
	}

	/**
	 * Seta a animação atual
	 * @owner Victor
	 */
	public void SetAnimation(String nomeAnimacao)
	{
		if (!nomeAnimacao.equals(_nomeAnimacaoAtual))
		{
			_nomeAnimacaoAtual = nomeAnimacao;
			animacoes.get(nomeAnimacao).Iniciar();
		}
	}

	/**
	 * Atualiza a animação atual a cada frame
	 * @owner Victor
	 */
	public void Atualizar(float milisegundos)
	{
		animacoes.get(_nomeAnimacaoAtual).Atualizar(milisegundos);
	}
}
